package cn.loioi.util.page;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import cn.loioi.util.page.query.Sort;
import cn.loioi.util.page.query.where.QueryFilter;
import cn.loioi.util.page.query.where.QueryGroup;
import cn.loioi.util.page.query.where.QueryRule;

/**
 * 分页查询
 * @file_name :PageUtil.java
 * @author :loioi.cn
 * @创建时间 :2016年10月31日 上午11:29:08
 */
public class PageUtil implements Serializable {

	private static final long serialVersionUID = -3486086036835371165L;
	private int pageNo = 1;
	private int pageSize = 10;
	private Sort sort = null;
	private boolean count = true;
	private List<QueryFilter> queryFilters = new ArrayList<>();

	public PageUtil() {
	}

	public PageUtil(int pageNo, int pageSize, boolean count) {
		this(pageNo, pageSize);
		this.count = count;
	}

	public PageUtil(int pageNo, int pageSize) {
		this.pageNo = pageNo;
		this.pageSize = pageSize;
	}

	/**
	 * 获取当前页数
	 * @return
	 */
	public int getPageNo() {
		return pageNo;
	}

	/**
	 * 设置当前页码
	 * @param pageNo
	 */
	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	/**
	 * 获取每页条数
	 * @return
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页条数
	 * @param pageSize
	 */
	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 是否统计总数
	 * @return
	 */
	public boolean isCount() {
		return count;
	}

	/**
	 * 设置是否统计总数
	 * @param count
	 */
	public void setCount(boolean count) {
		this.count = count;
	}

	/**
	 * 获取排序字段
	 * @return
	 */
	public Sort sort() {
		return sort;
	}

	/**
	 * 设置排序字段
	 * @param sort
	 * @return
	 */
	public Sort sort(String sort) {
		this.sort = new Sort(sort);
		return this.sort;
	}

	/**
	 * 获取查询条件
	 * @return
	 */
	public List<QueryFilter> getQueryFilters() {
		return queryFilters;
	}

	/**
	 * 添加查询条件
	 * @param filter
	 */
	public void addQueryFilter(QueryFilter filter) {
		this.queryFilters.add(filter);
	}

	/**
	 * 添加查询条件
	 * @param field
	 * @param data
	 */
	public void addQueryFilter(String field, Object data) {
		this.addQueryFilter(new QueryFilter(field, data));
	}

	/**
	 * 添加查询条件
	 * @param field
	 * @param queryRule
	 * @param data
	 */
	public void addQueryFilter(String field, QueryRule queryRule, Object data) {
		this.addQueryFilter(new QueryFilter(field, queryRule, data));
	}

	/**
	 * 添加查询条件
	 * @param queryGroup
	 * @param field
	 * @param queryRule
	 * @param data
	 */
	public void addQueryFilter(QueryGroup queryGroup, String field, QueryRule queryRule, Object data) {
		this.addQueryFilter(new QueryFilter(queryGroup, field, queryRule, data));
	}

	/**
	 * 添加查询条件
	 * @param filters
	 */
	public void addQueryFilters(Collection<QueryFilter> filters) {
		this.queryFilters.addAll(filters);
	}
}
